﻿' LibWowArmory
' by Ronald M. Clifford (roncli@roncli.com)
'
' This source code is released under the GNU Library General Public License (LGPL) Version 2.1.

Imports System.Collections.ObjectModel

Namespace roncliProductions.LibWowArmory.TalentTree

    ''' <summary>
    ''' A class that encapsulates a talent
    ''' </summary>
    ''' <remarks></remarks>
    Public Class Talent

        Private lstRanks As New Collection(Of String)
        Private lstRequiredPower As New Collection(Of Power)

        ''' <summary>
        ''' The ID number of the talent
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TalentID As Integer

        ''' <summary>
        ''' The name of this talent
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Name As String

        ''' <summary>
        ''' The key that Blizzard uses to identify this talent
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Key As String

        ''' <summary>
        ''' The number of points the character has put into this talent
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Points As Integer

        ''' <summary>
        ''' The maximum number of points that can be put into this talent
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MaxPoints As Integer

        ''' <summary>
        ''' The tree's column that the talent appears in
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TreeColumn As Integer

        ''' <summary>
        ''' The tree's row that the talent appears in
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TreeRow As Integer

        ''' <summary>
        ''' The key of the talent that is required to take this talent
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property RequiredTalentKey As String

        ''' <summary>
        ''' The amount of time it takes to cast this talent's spell
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SpellCastTime As Double

        ''' <summary>
        ''' The cooldown on this talent's spell in milliseconds
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SpellCooldown As Integer

        ''' <summary>
        ''' The maximum range of this talent's spell in yards
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SpellMaxRange As Integer

        ''' <summary>
        ''' The HTML text that describes each rank's abilities
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Ranks As Collection(Of String)
            Get
                Return lstRanks
            End Get
        End Property

        ''' <summary>
        ''' The list of required power needed to cast this talent's spell
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property RequiredPower As Collection(Of Power)
            Get
                Return lstRequiredPower
            End Get
        End Property

        ''' <summary>
        ''' A constructor to create new talent information
        ''' </summary>
        ''' <param name="intTalentID"></param>
        ''' <param name="strName"></param>
        ''' <param name="strKey"></param>
        ''' <param name="intPoints"></param>
        ''' <param name="intMaxPoints"></param>
        ''' <param name="intTreeColumn"></param>
        ''' <param name="intTreeRow"></param>
        ''' <param name="strRequiredTalentKey"></param>
        ''' <remarks></remarks>
        Public Sub New(ByVal intTalentID As Integer, ByVal strName As String, ByVal strKey As String, ByVal intPoints As Integer, ByVal intMaxPoints As Integer, ByVal intTreeColumn As Integer, ByVal intTreeRow As Integer, ByVal strRequiredTalentKey As String)
            TalentID = intTalentID
            Name = strName
            Key = strKey
            Points = intPoints
            MaxPoints = intMaxPoints
            TreeColumn = intTreeColumn
            TreeRow = intTreeRow
            RequiredTalentKey = strRequiredTalentKey
        End Sub

    End Class

End Namespace
